var Utils = require('geoUtils');
var InputTypeEnum = require('geoInputTypeEnum');
/**
 * 点击会显示输入模块
 */
cc.Class({
    extends: cc.Component,

    properties: {
        title: {
            default: '输入框',
            tooltip: '弹出的输入模块的标题'
        },
        input: {
            default: '',
            tooltip: '默认的输入值'
        },
        maxLength: {
            default: -1,
            type: cc.Integer,
            tooltip: '最大字符数量'
        },
        inputEvents: {
            default: [],
            type: [cc.Component.EventHandler],
            tooltip: '接收输入的事件'
        },
        okEvents: {
            default: [],
            type: [cc.Component.EventHandler],
            tooltip: '接收输入完成的事件'
        },
        whereToShow: {
            default: null,
            type: cc.Node,
            tooltip: '用于显示输入控件的位置，不设置则使用默认剧中位置',
        },
        useOverlay: {
            default: true,
            tooltip: '是否显示在最顶层'
        },
        inputType: {
            default: InputTypeEnum.MINI,
            type: cc.Enum(InputTypeEnum),
            tooltip: '使用的键盘类型'
        }
    },
    start() {
        this._ui = require('geoUIManager').Singleton;
    },
    onClick() {
        var inputMethod =
            this._ui.openInput(this.title, this.input, this.maxLength,
                this._onInput.bind(this), this._onOK.bind(this),
                this.inputType,
                // TODO 临时解决显示在最上层的问题，但运用镜头后，此方法可能并不适用
                (this.useOverlay === true) ? null : this.whereToShow);
        //
        if (this.whereToShow != null) {
            // 重定位
            var inputNode = inputMethod.baseNode;
            // 如果有widget，就取消
            var widget = inputNode.getComponent(cc.Widget);
            if (widget)
                widget.enabled = false;
            //
            var wp = Utils.node.getWorldPosition(this.whereToShow);
            Utils.node.setWorldPosition(inputNode, wp);
        }
    },
    _onInput(input, key) {
        this.input = input;
        cc.Component.EventHandler.emitEvents(this.inputEvents, new cc.Event.EventCustom('onInput'), input, key);
    },
    _onOK(input) {
        this.input = input;
        cc.Component.EventHandler.emitEvents(this.okEvents, new cc.Event.EventCustom('onOK'), input);
    }
    // update (dt) {},
});
